package com.openess.bigsearch.engine.utils;

import java.util.Collection;
import java.util.Set;

public interface Map<K, V> {
	int size();

	boolean isEmpty();

	boolean containsKey(Object ob);

	/**
	 * 其效率会明显低于containsKey，因为需要遍历整个集合
	 * 
	 * @param ob
	 * @return
	 */
	boolean containsValue(Object ob);

	/**
	 * 根据关键字，得到
	 * 
	 * @param ob
	 * @return
	 */
	V get(Object ob);

	/**
	 * 如果遇到相同的key那么覆盖原值，并返回原值。如果没有相同的key那么返回null
	 * 
	 * @param key
	 * @param value
	 * @return
	 */
	V put(K key, V value);

	/**
	 * 根据key来删除元素，并返回被删除的元素的value
	 * 
	 * @param ob
	 * @return
	 */
	V remove(Object ob);

	/**
	 * 和原版实现一样，添加的map集合会覆盖掉原map中相同key的数据
	 * 
	 * @param map
	 */
	void putAll(Map<? extends K, ? extends V> map);

	/**
	 * 清空结合中的所有数据
	 */
	void clear();

	Set<K> keySet();

	Collection<V> values();

	Set<Map.Entry<K, V>> entrySet();

	interface Entry<K, V> {
		K getKey();

		V getValue();

		V setValue(V value);

		boolean equals(Object ob);

		int hashCode();
	}

	int hashCode();
}
